//============================================================================
// Name        : client.h
// Author      : xiaoming
// Version     :
// Date        : 2013.07.03
// Copyright   : xiaoming_beta@163.com
// Description : the client function class
//============================================================================
/*
c)客户端程序
客户端程序，需要起多个进程，每个进程拥有一个id，一个usr_id，绑定到一个默认分配的UDP端口上。
每个客户端进程启动后，通过自己绑定的UDP端口向负载均衡器发送n条“时间请求”消息，并接收相应的时间应答消息。
时间请求消息中的src_id填写自己的id，usr_id填写自己的usr_id，dst_id填写负载均衡器进程的id。
每个客户端进程的id、usr_id，发送的消息条数n，可以通过命令行参数传入，可以通过配置文件配置，也可以在进程启动时指定。三种方式，只要支持任意一种就行了。
注意，不同客户端进程的id、usr_id可以相同。
客户端进程，在运行过程中，需要将自己接收/发送的每一个消息，都实时显示给用户看。
客户端进程完成自己的任务后，显示一下相关的统计信息，即可退出。
统计信息包括本进程发送了多少条消息，接收了多少条消息（正确的多少条，错误的多少条）。
*/

#ifndef CLIENT_H
#define CLIENT_H
#include "udpsocket.h"

#include <QMainWindow>
#include <QStandardItemModel>
#include <QTimer>
#include <QDateTime>
namespace Ui {
class Client;
}

class Client : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit Client(QWidget *parent = 0);
    ~Client();
    
    void init(int isSend);
    void addSendMsgToTable();
    void addRecvMsgToTable();
    void fillMsg(QStringList msg);
    void displayMsg();
    void initSendMsg();
private slots:
    void startSending();
    void sendMsg();
    void recvMsg();
private:
    Ui::Client *ui;

    t_msg m_msg;
    string m_timeRequest;
    string m_ip;
    string m_loadIp;
    unsigned int m_port;
    QString m_sendMsgContent;
    QTimer *m_timer;
    UdpSockets m_updSocket;

    QStandardItemModel *m_model;

    static int times;
    static int m_recvRightMsg;
    static int m_recvErrorMsg;
    static int m_sendRightMsg;
    static int m_sendErrorMsg;
};

#endif // CLIENT_H
